package weaver.interfaces.ybcn.duss.action;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.weaver.general.BaseBean;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import weaver.interfaces.ybcn.duss.utils.T100Util;
import weaver.soa.workflow.request.RequestInfo;

/**
 * @Title: ecology-idea
 * @Company: 泛微软件
 * @author: weaver.Dusongsong
 * @version: 1.0
 * @CreateDate: 2024-04-30
 * @Description: 费用报销申请新流程调用员工报销申请单生成接口
 * @ModifyLog: OA-T100，OA将费用报销传给T100
 **/
public class WeaFybxsqlcAction extends BaseBean implements Action {
    @Override
    public String execute(RequestInfo requestInfo) {
        String requestid = requestInfo.getRequestid();
        String tablename = requestInfo.getRequestManager().getBillTableName();
        String src = requestInfo.getRequestManager().getSrc();
        writeLog(">>>>>WeaFybxsqlcAction>>>>>requestid=" + requestid);
        try {
            RecordSet rs = new RecordSet();
            T100Util t100Util = new T100Util();
            rs.execute("select id,sqr,sqrbm,nbddh,bz,ZOAID from " + tablename + " where requestid=?", requestid);
            if (rs.next()) {
                JSONObject payloadJson = new JSONObject();
                JSONObject stddataJson = new JSONObject();
                JSONObject parameterJson = new JSONObject();
                JSONArray apcatList = new JSONArray();
                JSONObject apcatJson = new JSONObject();
                String mainid = Util.null2String(rs.getString("id"));
                String gc = Util.null2String(rs.getString("gc"));
                //账套	主表	工厂	gc	传编码
                apcatJson.put("apcacomp", gc);
                //账务中心	主表	工厂	gc
                apcatJson.put("apcasite", gc);
                //预支申请单别
                apcatJson.put("apcadocno","AP16");
                //单据日期		当前日期		传接口日期
                apcatJson.put("apcadocdt", t100Util.getTimestamp());
                //账款单性质
                apcatJson.put("apca001", "2");
                //账务人员
                apcatJson.put("apca003", "940002");
                //申请人员	主表	申请人
                apcatJson.put("apca014", Util.null2String(rs.getString("sqr")));
                String sqrbm = Util.null2String(rs.getString("sqrbm"));
                //费用部门	主表	申请人部门
                apcatJson.put("apca015", sqrbm);
                //专案编号	主表	内部订单号
                apcatJson.put("apca033", Util.null2String(rs.getString("nbddh")));
                //交易原币种	主表	币种	bz
                String bz = Util.null2String(rs.getString("bz"));
                apcatJson.put("apca100", bz);
                //来源单号	主表	流程编号
                apcatJson.put("source_no", Util.null2String(rs.getString("ZOAID")));
                JSONArray apcbtlList = new JSONArray();
                JSONArray isamtlList = new JSONArray();
                rs.execute("select * from " + tablename + "_dt1 where mainid=?", mainid);
                int count = 1;
                while (rs.next()) {
                    JSONObject apcbtJson = new JSONObject();
                    JSONObject isamtJson = new JSONObject();
                    //项次		序号
                    apcbtJson.put("apcbseq", count);
                    //品名规格	明细表	报销事由
                    apcbtJson.put("apcb005", Util.null2String(rs.getString("bxsy")));
                    //业务部门	主表	申请人部门
                    apcbtJson.put("apcb010", Util.null2String(rs.getString("sqrbm")));
                    //理由码	明细表	费用类型
                    apcbtJson.put("apcb014", Util.null2String(rs.getString("fylx")));
                    //税种	明细表	税种
                    apcbtJson.put("apcb020", Util.null2String(rs.getString("sz")));
                    //品名规格	明细表	报销事由
                    apcbtJson.put("apcb100", bz);
                    String wsjz = Util.null2String(rs.getString("wsjz"));
                    //原币未税金额	明细表	未税金额
                    apcbtJson.put("apcb103", wsjz);
                    //原币税额	明细表	税额
                    String se = Util.null2String(rs.getString("se"));
                    apcbtJson.put("apcb104", se);
                    //原币含税金额	明细表	含税金额
                    String hsje = Util.null2String(rs.getString("hsje"));
                    apcbtJson.put("apcb105", hsje);
                    //项次		序号
                    isamtJson.put("isamseq",count);
                    //发票号码	明细表	发票号码
                    isamtJson.put("isam010", Util.null2String(rs.getString("fphm")));
                    //发票日期	明细表	发票日期
                    isamtJson.put("isam011", Util.null2String(rs.getString("fprq")));
                    //税别	明细表	税种	sz	传编码
                    isamtJson.put("isam012", Util.null2String(rs.getString("sz")));
                    //币种	主表	币种	bz	传编码
                    isamtJson.put("isam014",bz);
                    //汇率
                    isamtJson.put("isam015", "1");
                    //发票原币未税金额	明细表	未税金额	wsjz
                    isamtJson.put("isam023", wsjz);
                    //发票原币税额	明细表	税额	se
                    isamtJson.put("isam024", se);
                    //发票原币含税金额	明细表	含税金额	hsje
                    isamtJson.put("isam025", wsjz);
                    //发票本币未税金额	明细表	未税金额	wsjz
                    isamtJson.put("isam026", wsjz);
                    //发票本币税额	明细表	税额	se
                    isamtJson.put("isam027", se);
                    //发票本币含税金额	明细表	含税金额	hsje
                    isamtJson.put("isam028", hsje);
                    //原始发票日期	明细表	发票日期	fprq
                    isamtJson.put("isam052", se);
                    count++;
                    apcbtlList.add(apcbtJson);
                    isamtlList.add(isamtJson);
                }
                apcatJson.put("apcb_t", apcbtlList);
                apcatJson.put("isam_t", isamtlList);
                apcatList.add(apcatJson);
                parameterJson.put("acttype", "A");
                parameterJson.put("apca_t", apcatList);
                stddataJson.put("parameter", parameterJson);
                payloadJson.put("std_data", stddataJson);
                writeLog(">>>>>WeaFybxsqlcAction>>>>>payloadJson=" + payloadJson);
                JSONObject resultJson = t100Util.apDataCreateOa(payloadJson, "WeaFybxsqlcAction", requestid, src);
                writeLog(">>>>>WeaFybxsqlcAction>>>>>resultJson=" + resultJson);
                String message = Util.null2String(resultJson.getString("message"));
                if ("success".equals(message)) {
                    JSONObject dataJson = JSONObject.parseObject(resultJson.getString("data"));
                    JSONObject retPayloadJson = JSONObject.parseObject(dataJson.getString("payload"));
                    JSONObject retStddataJson = JSONObject.parseObject(retPayloadJson.getString("std_data"));
                    JSONObject retParameterJson = JSONObject.parseObject(retStddataJson.getString("parameter"));
                    int failnum = Util.getIntValue(retParameterJson.getString("failnum"), 0);
                    if (failnum > 0) {
                        JSONArray failreturnList = JSONArray.parseArray(retParameterJson.getString("fail_return"));
                        String errorMsg = failreturnList.getJSONObject(0).getString("error_msg");
                        requestInfo.getRequestManager().setMessageid("111111");
                        requestInfo.getRequestManager().setMessagecontent("调用T100系统接口返回:" + errorMsg);
                        return Action.FAILURE_AND_CONTINUE;
                    } else {
                        JSONArray successreturnList = JSONArray.parseArray(retParameterJson.getString("success_return"));
                        String successMsg = successreturnList.getJSONObject(0).getString("success_msg");
                        rs.execute("update " + tablename + " set erplydh='" + successMsg + "' where requestid=?", requestid);
                    }
                } else {
                    requestInfo.getRequestManager().setMessageid("111111");
                    requestInfo.getRequestManager().setMessagecontent("调用T100系统接口返回:" + message);
                    return Action.FAILURE_AND_CONTINUE;
                }
            }
            return Action.SUCCESS;
        } catch (Exception e) {
            writeLog(">>>>>WeaFybxsqlcAction>>>>>Exception=" + e);
            requestInfo.getRequestManager().setMessageid("111111");
            requestInfo.getRequestManager().setMessagecontent("Action接口处理异常,请联系管理员");
            return Action.FAILURE_AND_CONTINUE;
        }
    }

}